\documentclass[11pt]{article}
\usepackage[T1]{fontenc} 
\usepackage[utf8x]{inputenc} 
\usepackage{lmodern}
\usepackage [frenchb]{babel}
% Pour pouvoir utiliser 
\usepackage{ucs}

\usepackage{textcomp}
\usepackage{graphicx}
\usepackage{keystroke}
\usepackage{amssymb}
\usepackage{amsmath}
%\renewcommand{\thesection}{\arabic{section}} % numérotation des sections	
\usepackage[cc]{titlepic} %rajouter le logo dans la page de garde
\usepackage{url} % Pour avoir de belles url
\usepackage[a4paper]{geometry}
\usepackage[linktocpage]{hyperref}
% Pour pouvoir faire plusieurs colonnes
\usepackage {multicol}
%Pour faire plusieurs lignes
\usepackage{multirow}
\usepackage{slashbox}
% Pour mettre du code source
\usepackage {listings}
% Pour pouvoir passer en paysage
\usepackage{lscape}	

% Pour pouvoir faire plusieurs colonnes
\usepackage {multicol}

% POur crééer un index
\usepackage{makeidx}

%insertion de pdf
\usepackage{pdfpages}

%Utilisation d'acronyme
\usepackage{acronym}

\usepackage{fancyhdr}

\pagestyle{fancy}
\usepackage{lastpage} %numérotation type k/n
\renewcommand{\footrulewidth}{0.5pt} % trait horizontal
%\renewcommand{\headrulewidth}{1pt} % suppresion du trait horizontal dans l'entête
\lfoot{Rapport de développement}
\cfoot{\thepage \hspace{0.15cm}sur  \pageref{LastPage} } % numérotation des pages
\rfoot{A.\textsc{M} \& R.\textsc{R}}
\fancyhead[L]{\hspace{-1cm}\includegraphics[scale=0.105]{img/logouniv.eps}} %logo entête !
\fancyhead{\empty} %logo entête !


\fancypagestyle{plain}{% 1ères pages des chapitres:
  \fancyhead{} % supprime l’entete...
  \renewcommand{\headrulewidth}{0pt} % ...et le filet
}

\renewcommand{\thesection}{\arabic{section}}





\hypersetup{
  backref=true,
  %permet d'ajouter des liens dans...
  pagebackref=true,%...les bibliographies
  hyperindex=true, %ajoute des liens dans les index.
  colorlinks=true, %colorise les liens
  breaklinks=true, %permet le retour à la ligne dans les liens trop longs
  urlcolor= blue, %couleur des hyperliens
  citecolor=	cyan,
  bookmarks=true, %créé des signets pour Acrobat
  bookmarksopen=true,
  %si les signets Acrobat sont créés,
  %les afficher complètement.
  pdftitle={HADL-Code}, %informations apparaissant dans
  pdfauthor={AM RR},
  %dans les informations du document
  pdfsubject={Doc}
  %sous Acrobat.
}

%\makeindex
%%%% debut macro pour enlever le nom chapitre %%%%
\makeatletter
\def\@makechapterhead#1{%
  \vspace*{50\p@}%
          {\parindent \z@ \raggedright \normalfont
            \interlinepenalty\@M
            \ifnum \c@secnumdepth >\m@ne
            \Huge\bfseries \thechapter\quad
            \fi
            \Huge \bfseries #1\par\nobreak
            \vskip 40\p@
}}

\def\@makeschapterhead#1{%
  \vspace*{50\p@}%
          {\parindent \z@ \raggedright
            \normalfont
            \interlinepenalty\@M
            \Huge \bfseries  #1\par\nobreak
            \vskip 40\p@
}}
\makeatother
%%%% fin macro %%%%
%Couverture 
\widowpenalty=10000
\clubpenalty=10000


\title{ {\huge \textsc{Components and Architectures}} \\  Master ALMA 2\up{eme} année  \\ \emph{Rapport TP}\\{\small Encadrant :  M.\textsc{Oussalah}}}
\author{A.\textsc{Marguerite} \\ R.\textsc{Rincé}}
\newcommand{\cf}{\emph{cf}.}


\begin{document}

\maketitle
\renewcommand{\labelitemi}{$\bullet$} 



\section{Introduction}\label{sec:intro}
Dans le cadre du module \textsc{Components and Architectures}, il nous a été proposé de réaliser un Home Architecture Domain Language (HADL). Dans un précédent rapport, nous avons proposé un méta modèle de notre architecture à composants, ainsi qu'une implémentation de ce dernier proposant un modèle d'une application \textit{clients-serveur}. La dernière étape de ce projet est de coder cette application. Dans ce document nous détaillerons les choix implémentation ainsi que les problématiques rencontrées. Enfin nous terminerons par un bref résumé des tâches à effectuer.
\section{Démarches et choix d'implémentations}\label{sec:pblm}
Le langage choisi pour ce projet est JAVA. Les motivations de ce choix sont les suivantes : la facilité, ainsi que les qualités des outils proposés par l'IDE Eclipse pour un projet de développement au nombre de classe potentiellement très grand. 

La question de la méthode de développement s'est imposée à cette étape du projet. Fallait-il tout coder à la main, ou utiliser des outils de génération ? Nous étions notamment séduit par l'idée d'utiliser le framework \emph{Xcore}. Nous avons donc commencé à rédiger une grammaire dans un fichier \verb+.ecore+ décrivant nos méta-models. Bien que les résultats de la générations étaient satisfaisants, nous avons abandonné cette solution. Le code généré était plus complexe et possédait un nombre de signatures et de méthodes supplémentaires important. Nous avons jugé que cela pouvait rendre le développement plus difficile et nous induire en erreurs. Nous avons donc fait marche arrière et recommencé la création de toutes les classes manuellement. Bien que longue et fastidieuse, cette méthode nous a permis d'avoir une vision claire de notre avancée dans le développement.

\paragraph{Communication au sein de l'architecture}
Deux solutions étaient envisageables :
\begin{enumerate}
\item
  Utiliser la classe \verb+Thread+ proposée par le JDK, et étendre chaque élément de notre modèle. 
\item
  Implémenter le pattern Observateur, à partir de l'API proposée par le JDK avec les classes \verb+Observable+ et \verb+Observer+.
\end{enumerate} 

C'est cette deuxième solution qui a été retenue. Nous évitions notamment d'étendre chaque classe de notre méta-modèle et de changer en profondeur ce dernier.

\paragraph{Journalisation}
Nous avons choisi d'utiliser AspectJ pour remplir cette fonctionnalité.  Ainsi il est possible de suivre le fil d'exécution sur la sortie standard.

\section{Travail réalisé}
À ce stage du développement, l'application est fonctionnelle. Un Client peut par l'intermédiaire d'une configuration \og Main \fg{} contenant un composant Client interroger une configuration Serveur contenant un client serveur. Les fonctionnalités à la disposition de l'utilisateur sont les suivantes :
\begin{itemize}
\item
  Effectuer une connexion à partir de la commande \verb+connexion+ et d'un identifiant autorisé (ici \verb+Admin+ ou \verb+toto+)\hfill \\
  \emph{ex :} \verb-connexion Admin-.
\item
  Une fois connecté, l'utilisateur à sa disposition la commande \verb+requete+ prenant deux paramètres, son identifiant et une requête.  \hfill \\ 
  \emph{ex : }\verb-requete Admin 2+2-.
\item
  Quitter l'application en tapant \verb+quit+.
\end{itemize}
\paragraph{}

L'utilisateur pourra alors, assister au traces correspondantes au cheminement de sa requête au sein de l'architecture à composant de l'application.


\section{Reste à faire}
Les tâches restantes sont les suivantes : 

\begin{itemize}
\item
  Amélioration de la transmission des objets dans les ports (éviter les cast).
\item
  Rajouter des tests de compatibilité entre les interfaces de deux composants.
  
\item
  Gestion de la synchronisation des ports (pas de gestion asynchrone pour l'instant).
\item
  Notre composant DataBase n'est pas encore une base de données relationnelle.  
  \end{itemize}

\end{document}

%%  LocalWords:  Butler Southampton UK Damchoom Postdoc Event-B ONFI
%%  LocalWords:  l'IDE Fourth refinement skip end fail compt write
%%  LocalWords:  begin step multi temp Components Archictecture HADL
% LocalWords:  Domain Language implémentation clients-serveurs blah
% LocalWords:  d'implémentations Eclipse blahblah blahblahblah EMF
% LocalWords:  blahblahblahblahblahyy blahblahblahblahblah framework
% LocalWords:  blahblahblahblah ecore méta-models Journalisation quit
% LocalWords:  AspectJ Admin requete clients-serveur Fallait-il Xcore
% LocalWords:  Thread JDK l'API méta-modèle cast
